package com.swanclouds.redfish.systems.domain;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.swanclouds.model.systems.LogEntrieResource;
import com.swanclouds.redfish.common.redfish.MemberModel;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 张立强
 * @version jdk1.8.0
 */
public class LogEntrieResourceModel implements LogEntrieResource {
    /**
     * 系统资源的访问路径
     */
    @JsonProperty("@odata.id")
    private String dataId;

    /**
     * 系统资源模型的OData描述信息
     */
    @JsonProperty("@odata.context")
    private String context;

    /**
     * 系统资源的类型
     */
    @JsonProperty("@odata.type")
    private String type;

    /**
     * 系统资源的名称
     */
    @JsonProperty("Name")
    private String name;

    @JsonProperty("Description")
    private String description;

    @JsonProperty("Members@odata.count")
    private Integer count;

    @JsonProperty("Members")
    private List<MemberModel> entries;

    @JsonProperty("Members@odata.nextLink")
    private String nextLink;

    /**
     * 集合资源的访问路径 @odata.id
     *
     * @return dataId
     */
    @Override
    public String getDataId() {
        return this.dataId;
    }

    /**
     * 集合资源模型的描述信息 @odata.context
     *
     * @return context
     */
    @Override
    public String getContext() {
        return this.context;
    }

    /**
     * 集合资源的类型 @odata.type
     *
     * @return type
     */
    @Override
    public String getType() {
        return this.type;
    }

    /**
     * 资源名称 Name
     *
     * @return name
     */
    @Override
    public String getName() {
        return this.name;
    }
    /**
     * @return description 详情
     */
    @Override
    public String getDescription() {
        return this.description;
    }

    /**
     * @return 当前日志资源数量
     */
    @Override
    public Integer getCount() {
        return this.count;
    }

    /**
     * @return 单个日志资源节点的访问路径集合
     */
    @Override
    public List<String> getEntries() {
        return this.entries.stream().map(MemberModel::getDataId).collect(Collectors.toList());
    }

    /**
     * @return 下一分页的链接
     */
    @Override
    public String getNextLink() {
        return this.nextLink;
    }

    @Override
    public String toString() {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.writeValueAsString(this);
        } catch (JsonProcessingException e) {
        }
        return "LogEntrieResourceModel {" +
                "dataId='" + dataId + '\'' +
                ", context='" + context + '\'' +
                ", type='" + type + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                ", count=" + count +
                ", entries=" + entries +
                ", nextLink='" + nextLink + '\'' +
                '}';
    }
}
